Ficheiros *.nb (Mathematica notebook):
Conjunto de células de vários tipos

Tipos de células:
* input
* output
* gráficos
* texto, etc.

Células de input: podem ser avaliadas
Células de output: normalmente são produzidas pela avaliação de células de input

Quando se começa a escrever, o Mathematica assume automáticamente que se vai criar um input e cria uma célula desse tipo.

Para avaliar uma célula de input, carregar Shift+Enter com o cursor na célula ou com a célula selecionada.
É possível seleccionar mais do que uma célula simultâneamente.

Exemplo de uma célula de input que ao ser avaliada produz uma célula de output:

2+2

Exemplo de uma célula de input que ao ser avaliada cria uma célula de gráficos e uma célula de output

Plot[Sin[t],{t,-Pi,Pi}]

O output assinalado por ".Graphics." contém a informação para desenhar o gráfico tal como se vê acima

Show[Out[2]]

As células de texto não são avaliadas mas são úteis para vários fins:
* Produzir textos, relatórios, etc, combinando elementos "matemáticos" com explicações, títulos, etc..
* Introduzir comentários num ficheiro *.nb puramente matemático, para o tornar mais inteligível
Exemplo:

A sucessão x(i+1)=f(x(i),a) converge para raiz de a:

f[x_,a_]=(a+x^2)/(2x);

Células de texto são produzidas carregando Alt+7

O tipo de uma determinada célula pode ser modificado através do menu Format -> Style

Cada tipo de células tem propriedades específicas que podem ser alteradas

As células podem ser apresentadas com diferentes aspectos que podem ser modificados através dos menus 
Cell->Default Input Format Type,  
Cell->Default Ouput Format Type, etc.

Eu prefiro as opções
Default Input Format Type = StandardForm : dá um controlo exacto daquilo que se quer que o Mathematica faça
Default Ouput Format Type = TraditionalForm : permite ler os outputs na notação matemática habitual

Exemplo:

Integrate[f[x],{x,a,b}]

HELP do Mathematica:
Para aceder ao Help, carregar F1.

O Help está organizado em várias categorias. As mais importantes são:
Built-in functions: Explica o uso das funções nativas do Mathematica
The Mathematica Book: Manual em formato electrónico.

Para aceder directamente à informação relativa a qualquer objecto presente no notebook basta seleccionar o objecto antes de carregar F1

Exemplo: ao escrever um input com a função Sum surge uma dúvida sobre a sua sintaxe

Exemplo: o Mathematica devolve um output cujo significado não entendemos:

Integrate[Exp[-x^2],{x,a,b}]

Capacidades do Mathematica:
* Cálculo numérico
* Cálculo simbólico
* Gráficos, sons, etc

CÁLCULO SIMBÓLICO:

É baseado na manipulação de símbolos segundo regras bem definidas.
Exemplo:

6+x-2x+1+y

Os símbolos são caracterizados por um nome (sequência de caracteres)

Existem convenções na atribuição de nomes a símbolos. 
Estas convenções não são obrigatórias (i.e., o seu desrespeito não provoca automáticamente uma situação de erro) mas é mais fácil escrever ficheiros sem erros respeitando as convenções.

Principais convenções:
* símbolos definidos pelo utilizador começam por letra minúscula
* símbolos prédefinidos começam por letra maiúscula
* variáveis globais ou de sistema começam por $

Exemplos:

Sin[x]

$RecursionLimit

Cálculos simbólicos são sempre exactos:

2/6

Para obter um valor numérico (aproximado ) de 1/3 é necessário proceder à sua avaliação numérica

% //N

Símbolos podem ser substituídos por valores concretos ou por outros símbolos
Exemplos:

x^2+2x*y+y^2

x^2+2x*y+y^2/.x->1

x^2+2x*y+y^2/.x->y

Aos símbolos podem ser atribuídos valores
Se um símbolo tem um valor atribuído, ele será substituido pelo seu valor em todos os cálculos simbólicos
o valor atribuído a um símbolo pode ser outro símbolo ou uma expressão
Exemplos:

x=2

x^2+2x*y+y^2

x=z+1

x^2+2x*y+y^2

Para remover todos os valores atribuidos a um simbolo, usar Clear[symbol] ou symbol=.
Exemplo:

Clear[x];x^2+2x*y+y^2

x=.;x^2+2x*y+y^2

Quando se avalia uma célula que contém um símbolo até aí inexistente, o Mathematica cria automáticamente o símbolo indicado, mesmo que não lhe seja atribuído nenhum valor.
Exemplo:

x+1

A função Clear ou =. não destrói os símbolos (apenas destrói as atribuições que lhes foram feitas). Para destruir um símbolo é necessário usar Remove[symbol]

Remove[x]

O Mathematica dispõe de várias funções para manipular expressões simbólicas
Exemplos

Simplify[(x^2+2x+1)/(1-x^2)]

Expand[(x-1)^3(x+2)^2]

Para outras funções que manipulam expressões simbólicas, ver no Help (Built-in Functions) 
Algebraic Computation > Formula Manipulation

Há símbolos prédefinidos que têm atribuídos os valores de certas constantes importantes

E

Pi

I

Infinity

Além das funções algébricas (+, -, *, /), o Mathematica inclui várias funções matemáticas prédefinidas que podem ser usadas tanto em cálculo numérico como em cálculo simbólico:

Sqrt[x] : Raíz quadrada

Sqrt[4]

Exp[x] : Exponencial

Exp[x]

Log[x] : Logaritmo natural

Log[E]

Log[b,x]:Logaritmo de x na base b

Log[2,8]

Log[2,9]

Sin[x]; Cos[x], Tan[x]: funções trigonométricas

Sin[Pi]

ArcSin[x], ArcCos[x], ArcTan[x]: funções trigonométricas inversas

ArcSin[1]

n! : factorial

5!

OPERAÇÕES MATEMÁTICAS EM CALCULO SIMBÓLICO

Derivação

Derivadas parciais:

D[x^2 Log[x+y],x]

D[x^2 Log[x+y],y]

Derivadas parciais de ordem superior

D[x^2 Log[x+y],x,y]

D[x^2 Log[x+y],x,y,x,x]

Integração e primitivação

Primitivação

Integrate[x^2Sin[y],x]

Integração

Integrate[x^2Sin[y],{x,a,b}]

O Mathematica consegue calcular integrais com alguma complexidade ...

Integrate[Log[t]^2(1+t^2)/t,{t,1,x}]

... Mas não todos

Integrate[Sin[Sin[x]],x]

Somatórios

Sum[x+i,{i,5}]

Produtos

Product[(x+i),{i,4}]

RELAÇÕES

x==y: igual

1==1

1==2

x==y

x != y diferente

1≠1

x≠y

x>y maior

1>2

x>=y maior ou igual

1≥1

EQUAÇÕES

O Mathematica pode resolver simbólicamente algumas equações

Solve[x^2+a*x-1==0,x]

Para obter o vector de soluções, fazer x/. solutions

x/. %

Para obter os valores de uma expressão quando x toma como valores as soluções da equação, fazer expr /. solutions

Sin[x]/.%%

Quando o lado esquerdo da equação é um polinómio de grau elevado, a solução pode ser dada apenas de forma implícita

Solve[x^6+x-1==0,x]

O Mathematica resolve equações algebricas

Solve[(x^2+1)/(x^3+2x)==x+1,x]

Solve[Sqrt[x+1]==(x^2-1),x]

Mas não resolve equações transcendentes

Solve[x^2+Sin[x]==0,x]

FUNÇÕES

Definir funções

Definições imediatas

g[x_]=x^2+1

g[a]

g[Sin[b]]

A difinição em vigor é a mais recente, quando aplicável

g[a,b]

g[x_,y_]=x^2-y^2

g[a]

g[a,b]

para ver a definição de uma função fazer ?function

?g

Definições diferidas

h[0]=1

h[x_]=x*h[x-1]

h[x_]:=x*h[x-1]

h[3]

h[4/3]

h[300]

LISTAS
São conjuntos de elementos colocados entre chavetas e separados por vírgulas

Listas cujos elementos são escalares representam vectores
Listas cujos elementos são vectores todos do mesmo comprimento representam matrizes cujas linhas são os vectores
Exemplos:

b={1,2,x,f[x]}

a={{1,2,3,4},{5,6,7,8}}

c={{-1,1},{1,0}}

{1,{a,b},{f[x]}}

O ponto "." serve para indicar tanto o produto interno entre vectores  como o produto matricial:

b.b

a.b

c.a

Operações matriciais

Transposição

Transpose[a]

Matriz Inversa

Inverse[c]

%.c

Determinates

Det[c]

Construção de listas

Table[i/(1+i^2),{i,5}]

Table[i+j+i*j,{i,4},{j,2,4}]

Table[Table[i,{i,j}],{j,5}]

Manipulação de elementos de listas

Elementos de Listas

b[[1]]

Sub-listas, submatrizes

b[[{1,2}]]

a[[{1,2},{1,3}]]

Clear[a,b,c]

CONTROLO DE FLUXO

O Mathematica contém várias estruturas de controlo que permitem escrever programas estruturados.
As principais são as seguintes:

If[cond, T, F] se cond for verdadeira, executa T, caso contrário executa F

Table[If[i>j,0,1],{i,5},{j,5}]

Do[expr, {i,m}] avalia  expr, com a variável i a tomar sucessivamente todos os valores inteiros de 1 a m

Do[x[i]=0,{i,4}];Table[x[i],{i,6}]

While[test, expr] primeiro avalia test, se o resultado for True avalia expr. repete até que o resultado de test não seja True

x=0;While[i<5,x=x+1];x

x=0;i=0;While[(i=i+1)<5,x=x+1];x

For[start, test, incr, expr] executa start, a seguir executa test. Se o resultado for True executa primeiro expr e a seguir incr. Repete até que o resultado de test não seja True.

For[i=1;x={},i<5,i++,x=Join[x,{i}]];x

VARIÁVEIS LOCAIS

Variáveis definidas no contexto de uma função Module[vars, body] são distintas de funções com o mesmo nome definidas globalmente ou no contexto de outra função Module

x=1

idx[n_]:=Module[{x,i},For[i=1;x={},i≤n,i++,x=Join[x,{i}]];x]

idx[10]

x

Clear[x]

CÁLCULO NUMÉRICO:

Números aproximados distinguem-se de números de números exactos (símbólicos) por conterem um ponto

Este é o número 1 (exacto)

1

Este é um número aproximadamente igual a 1

1.

Se quisermos o número 1.01 exacto, temos que usar

101/100

em vez de

1.01

Funções (nativas ou definidas pelo utilizador), quando aplicadas a um número aproximado dão origem a um número aproximado

Sin[1.]

Sin[1]

f[x_]=(1+x^2)/3; 

{f[1],f[1.]}

Para obter uma aproximação numérica para uma  expressão simbólica usar a função N:

N[Sin[1]]

Sin[1] //N

O Mathematica permite realizar cálculos numéricos com precisão arbitrária.

N[Sin[1],20]

Solução numérica de equações

Há equações que o Mathematica resolve de forma insatisfatória ou não resolve de todo

Solve[x^10+x^3-1==0,x]

Solve[Sin[x]==x^2,x]

A função NSolve resolve numéricamente (aproximadamente) qualquer equação polinomial mas não resolve equações transcendentes.

NSolve[x^10+x^3-1==0,x]

NSolve[Sin[x]==x^2,x]

A função FindRoot é universal mas devolve uma única solução, dependente do valor inicial fornecido.

FindRoot[Sin[x]==x^2,{x,-1}]

FindRoot[Sin[x]==x^2,{x,1}]

FindRoot[x^10+x^3-1==0,{x,1}]

FindRoot[x^10+x^3-1==0,{x,-1}]

O facto de FindRoot não encontrar nenhuma solução não prova que a solução não existe.

FindRoot[Sin[x]+x/1000==0,{x,3500}]

(Sin[x]+x/1000)/.%

FindRoot[Sin[x]+x/1000==0,{x,0}]

FindRoot[Sin[x]+x/1000==0,{x,2}]

(Sin[x]+x/1000)/.%

Integração numérica

Existem funções que o Mathematica não consegue integrar ou em que o resultado da integração pode não ser satisfatório

Integrate[Sin[Sin[x]],{x,0,1}]

Integrate[Exp[-x^2],{x,1/2,Infinity}]

NIntegrate[Sin[Sin[x]],{x,0,1}]

NIntegrate[Exp[-x^2],{x,1/2,Infinity}]